package com.renshengjiwu.utils;

import java.security.MessageDigest;

/**
 * │＼＿＿╭╭╭╭╭＿＿／│ │ │ │ │ │ － －│ │≡ ｏ ≡ │ │ │ ╰——┬Ｏ◤▽◥Ｏ┬——╯ ｜ ｏ ｜ ｜╭－－－╮把今天最好的表现当作明天最新的起点．．～ いま 最高の表現 として 明日最新の始発．．～ Today the best performance as
 * tomorrow newest starter! Created by IntelliJ IDEA.
 *
 * author: xiaomo github: https://github.com/xiaomoinfo email: xiaomo@xiaomo.info
 * 
 * Date: 16/4/3 10:03 Description: md5加密解密 Copyright(©) 2015 by xiaomo.
 */
public class MD5Util {

  private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

  /**
   * 转换字节数组为16进制字串
   *
   * @param b
   *          字节数组
   * @return 16进制字串
   */
  public static String byteArrayToString(byte[] b) {
    StringBuilder resultSb = new StringBuilder();
    for (byte aB : b) {
      resultSb.append(byteToHexString(aB));// 若使用本函数转换则可得到加密结果的16进制表示，即数字字母混合的形式
      // resultSb.append(byteToNumString(b[i]));//使用本函数则返回加密结果的10进制数字字串，即全数字形式
    }
    return resultSb.toString();
  }

  private static String byteToNumString(byte b) {

    int _b = b;
    if (_b < 0) {
      _b = 256 + _b;
    }

    return String.valueOf(_b);
  }

  private static String byteToHexString(byte b) {
    int n = b;
    if (n < 0) {
      n = 256 + n;
    }
    int d1 = n / 16;
    int d2 = n % 16;
    return hexDigits[d1] + hexDigits[d2];
  }

  public static String encode(String password, String salt) {
    String resultString = null;
    try {
      resultString = password + salt;
      MessageDigest md = MessageDigest.getInstance("md5");
      resultString = byteArrayToString(md.digest(resultString.getBytes()));
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return resultString;
  }

  public static void main(String[] args) {
    String password = "admin";
    String salt = RandomUtil.createSalt();
    System.out.println("原数据：" + password);
    System.out.println("盐值：" + salt);
    System.out.println("MD5后：" + encode(password, ""));
  }

}
